﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BusinessLayer.Interfaces;
using BusinessLayer.Implementacion;
using DevExpress.Web.ASPxEditors;
using EntityLayer;
using DevExpress.Web.ASPxPopupControl;
using System.Configuration;
namespace pryTransfinter.Transaciones
{
    public partial class wfrmEnviarTransferencia : System.Web.UI.Page
    {
        IFacadeSolicitarTrasnferencia blSolicitarTransferencia;
        IFacadeActualizarBeneficiario blActualizarBeneficiario;
        private static String strMsg, strTitulo;
        private static  int valor;
        private static ASPxPopupControl strPopup;
        private static ASPxLabel strLabel;
        protected void Page_Load(object sender, EventArgs e)
        {
            this.validarUser();

          
            if (!IsPostBack)
            {
                this.cargarCuenta();
                
               
            }
            //if (ASPxTextBox1.Text.Trim() != string.Empty)
            //{
            //    cboCuentaCliente.SelectedIndex = 3;
            //}
            //else
            //{
            //    cboCuentaCliente.SelectedIndex = 0;

            //}
        }

        void validarUser()
        {
            if (Session["user"]==null)
            {
                return;
            }
            if (Convert.ToString(Session["user"]) == "COORDINADOR")
            {
                btnBuscarCliente.Visible = false;
            }
            else
            {
                btnBuscarCliente.Visible = false;
            }
        }

        void cargarCuenta()
        {blSolicitarTransferencia = new FacadeSolicitarTransferencia_Imp();
            try
            {
            
            cboCuenta.DataSource = blSolicitarTransferencia.listarClientes();
            cboCuenta.TextField = "nomCliente";
            cboCuenta.ValueField = "idcCliente";
            cboCuenta.DataBind();
            cboCuenta.Items.Insert(0, new ListEditItem("[SELECCIONE]", ""));
            }
            catch (Exception ex)
            {
                strTitulo = "Cargando Combo Cliente";
                strMsg = (ex.InnerException.Message == null) ? ex.Message : ex.InnerException.Message;
                MostrarComentario(popupMensaje, lblmensaje, strMsg, strTitulo);
            }
            
        }

        void cargarCuentaCliente()
        {
            blSolicitarTransferencia = new FacadeSolicitarTransferencia_Imp();
            string id = (cboCuenta.SelectedItem.Value.ToString() == string.Empty)?"0" : (string)cboCuenta.Value;
            try
            {
                
                    cboCuentaCliente.DataSource = blSolicitarTransferencia.listaClientexID(id);
                    cboCuentaCliente.TextField = "nroCuenta";
                    cboCuentaCliente.ValueField = "nroCuenta";
                    cboCuentaCliente.DataBindItems();
                    cboCuentaCliente.Items.Insert(0, new ListEditItem("[SELECCIONE]", ""));
                   
                    
            }
            catch (Exception)
            {
            }

        }
        void cargarBeneficiario(string codigocliente)
        {blSolicitarTransferencia = new FacadeSolicitarTransferencia_Imp();
            try
            {
  
            cboCuentaBeneficiario.DataSource = blSolicitarTransferencia.listarBeneficiarioXCliente(codigocliente);
            cboCuentaBeneficiario.TextField = "cuentaBeneficiario";
            cboCuentaBeneficiario.ValueField = "cuentaBeneficiario";
            cboCuentaBeneficiario.DataBindItems();
            cboCuentaBeneficiario.Items.Insert(0, new ListEditItem("[SELECCIONE]", ""));
            //cboCuentaBeneficiario.SelectedIndex = 0;
            }
            catch (Exception ex)
            {
                strTitulo = "Cargando Combo Beneficiario";
                strMsg = ex.Message;
                MostrarComentario(popupMensaje, lblmensaje, strMsg, strTitulo);
            }
            
        }


        string obtenerCliente(string idcliente)
        {
            string nombreCliente = "";
            List<TB_Cliente> listaCliente = new List<TB_Cliente>();
            try 
	{	        
		blSolicitarTransferencia = new FacadeSolicitarTransferencia_Imp();
            
            listaCliente = blSolicitarTransferencia.getNombreCliente(idcliente);
            if (listaCliente.Count!=0)
            {
                nombreCliente = listaCliente[0].nomCliente;
            }
	}
	catch (Exception ex)
	{
        strTitulo = "Error al obtener Nombre Cliente";
        strMsg = ex.Message;
        MostrarComentario(popupMensaje, lblmensaje, strMsg, strTitulo);
	}
            return nombreCliente;
        }

        List<TB_Beneficiario> obtenerBeneficiario(string id)
        {blSolicitarTransferencia = new FacadeSolicitarTransferencia_Imp();
            List<TB_Beneficiario> listaBeneficiario = new List<TB_Beneficiario>();
            try
            {
                listaBeneficiario = blSolicitarTransferencia.getBeneficiario(id);
            }
            catch (Exception ex)
            {
            }
            return listaBeneficiario;
        }

        protected void btnCrear_Click(object sender, EventArgs e)
        {
            this.MostrarComentario(popupConfirmacion,lblconfirmacion,"Esta seguro de realizar la transacción");
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            this.newTransaccion();
        }

        void newTransaccion()
        {
            txtDireccionBeneficiario.Text = string.Empty;
            txtMonto.Text = string.Empty;
            cboCuentaCliente.SelectedIndex = 0;
            //txtNombre.Text = string.Empty;
            txtNombreBeneficiario.Text = string.Empty;
            cboBancoDestino.SelectedIndex = 0;
            cboCuenta.SelectedIndex = 0;
            cboCuentaBeneficiario.SelectedIndex = 0;
            cboMoneda.SelectedIndex = 0;
            cboTipocargo.SelectedIndex = 0;
            memDetallePago.Text = String.Empty;
            memObservaciones.Text = String.Empty;
            lblTipoCargo.Text=string.Empty;
            txtCodigoSwift.Text = string.Empty;
            cboBancoDestino.Text = string.Empty;
        }
        void cargarBancoDestino()
        {
            blSolicitarTransferencia = new FacadeSolicitarTransferencia_Imp();
            try
            {
                
                cboBancoDestino.TextField = "nombreBcoDestibo";
                cboBancoDestino.ValueField = "codigoBcoDestino";
                cboBancoDestino.DataSource = blSolicitarTransferencia.listarBancoDes();
                cboBancoDestino.DataBind();
            }
            catch (Exception ex)
            {
            }
        }

        string validarOfac()
        {
            blSolicitarTransferencia = new FacadeSolicitarTransferencia_Imp();
            string detalle= memDetallePago.Text;

            string output = "";
            try
            {
                String p = detalle;
                List<String> list = p.Split(' ').ToList();

                foreach (String s in list)
                {
                    output = blSolicitarTransferencia.listarGetOFAC(s);
                    if (output!=string.Empty)
                    {
                        break;
                    }
                
                }
                
            }
            catch (Exception)
            {
                
            }

            return output;
        }

        string obtenerIDCorresponsal(string id)
        {
            blSolicitarTransferencia = new FacadeSolicitarTransferencia_Imp();
            List<TB_BcoDestino> lista = new List<TB_BcoDestino>();
            string codigocorresponsal = "";
            try
            {
                lista = blSolicitarTransferencia.getCodigoCorresponsal(id);

                codigocorresponsal=lista[0].codigoCorresponsal;
            }
            catch (Exception)
            {
               
            }
            return codigocorresponsal;
        }
        bool insertarTransaccion()
        {
            bool resut = false;
            TB_Transferencia objTransaccion = new TB_Transferencia();
            blSolicitarTransferencia=new FacadeSolicitarTransferencia_Imp();
            try
            {
                objTransaccion.nroOperacion=blSolicitarTransferencia.ObtenerNroOpercionMax();
                Session["nroTransaccion"] = objTransaccion.nroOperacion;
               //objTransaccion.codigoBcoDestino=(string)cboBancoDestino.Value;
                objTransaccion.codigoBcoDestino = ASPxTextBox2.Text;
                objTransaccion.fecCreacion=System.DateTime.Now;
                objTransaccion.fecValor = System.DateTime.Now;
                objTransaccion.moneda=(string)cboMoneda.Value;
                objTransaccion.monto=Convert.ToDecimal(txtMonto.Text);
                objTransaccion.idcCliente=(string)cboCuenta.Value;
                objTransaccion.codBcoIntermediario=null;
                objTransaccion.detallePago=memDetallePago.Text;
                objTransaccion.infBcoBco="";
                objTransaccion.observaciones=memObservaciones.Text;
                objTransaccion.estado = "INGRESADAS";
                objTransaccion.comisiones = null;
                objTransaccion.textoDuplicidad = "";
                //objTransaccion.codigoCorresponsal = this.obtenerIDCorresponsal((string)cboBancoDestino.Value);
                objTransaccion.codigoCorresponsal = this.obtenerIDCorresponsal(ASPxTextBox2.Text);
                objTransaccion.codigoOFAC = null;
                objTransaccion.matriculaOperador = null;
                //objTransaccion.matriculaOperador = "";
                objTransaccion.tipoCargo = (string)cboTipocargo.Value;
                //objTransaccion.matriculaSupervisor = this.obtenerIdSupervisor("E88456");
                objTransaccion.matriculaSupervisor = null;
                objTransaccion.cuentaBeneficiario = (string)cboCuentaBeneficiario.Value;
                
                if (blSolicitarTransferencia.InsertarTransaccion(objTransaccion))
                {
                    valor = 1;
                    if (Session["nroTransaccion"].ToString()!=null)
                    {
                        lblNroTrans.Text = "Se realizó la transacción correctamente. " + "Nro  de Transacción " + Session["nroTransaccion"].ToString();
                        popupNroTrans.ShowOnPageLoad = true; 
                    }
                    
                    this.newTransaccion();
                }
                else
                {
                    valor = 0;
                    MostrarComentario(popupMensaje, lblmensaje, "Error al registrar transacción.");
                    this.newTransaccion();
                }
                    
                
            }
            catch (Exception ex)
            {
                valor = 0;
                strTitulo = "Transacción";
                strMsg =  ex.Message; 
                MostrarComentario(popupMensaje, lblmensaje,strMsg,strTitulo);
            }

            return resut;
        }

        string obtenerIdSupervisor(string idOperador)
        {
            blSolicitarTransferencia = new FacadeSolicitarTransferencia_Imp();
            List<TB_Operador> lista = new List<TB_Operador>();
            
            try
            {
                lista = blSolicitarTransferencia.getIdSupervisor(idOperador);

            }
            catch (Exception )
            {
                return null;
            }
            return lista[0].matriculaSupervisor;
        }

        private void MostrarComentario(ASPxPopupControl strPopup, ASPxLabel strLabel, String strMsg)
        {
            CargarAlert(strPopup,strLabel,strMsg, "Mensaje");
        }

        private void MostrarComentario(ASPxPopupControl strPopup, ASPxLabel strLabel, String strMsg, String strTitulo)
        {
            CargarAlert(strPopup,strLabel,strMsg, strTitulo);
        }

        private void CargarAlert(ASPxPopupControl strPopup,ASPxLabel strLabel, String strMsg, String strTitulo)
        {
            strPopup.HeaderText = strTitulo;
            strLabel.Text = strMsg;
            strPopup.ShowOnPageLoad = true;
        }

        protected void cboCuenta_SelectedIndexChanged(object sender, EventArgs e)
        {
            blSolicitarTransferencia = new FacadeSolicitarTransferencia_Imp();
            //txtNombre.Text = this.obtenerCliente(Convert.ToString(cboCuenta.Value));
            //this.cargarCuentaCliente();
            //this.cargarBeneficiario((string)cboCuenta.Value);
           
            this.cargarCuentaCliente();
          
        }

        protected void cboCuentaBeneficiario_SelectedIndexChanged(object sender, EventArgs e)
        {
            List<TB_Beneficiario> listaBeneficiario = new List<TB_Beneficiario>();

            listaBeneficiario = this.obtenerBeneficiario(Convert.ToString(cboCuentaBeneficiario.Value));
            if (listaBeneficiario.Count!=0)
            {
                txtNombreBeneficiario.Text = listaBeneficiario[0].nomBeneficiario;
                txtDireccionBeneficiario.Text = listaBeneficiario[0].dirBeneficiario;
            }
           

        }

        protected void btnAceptarC_Click(object sender, EventArgs e)
        {
            this.insertarTransaccion();

            
        }

        protected void btnAceptarM_Click(object sender, EventArgs e)
        {
            //if (valor == 1)
            //{
            //    Response.Redirect("wfrmCoordinarTransferencia.aspx");
            //    this.newTransaccion();
            //}
        }

        protected void btnValidarCodigo_Click(object sender, EventArgs e)
        {
            
            this.validarCodigoSwift();

            //Session["cuentacli"] = cboCuentaCliente.Text;
            //Session["supplier"] = cboCuentaBeneficiario.Text;
           
        }

        void validarCodigoSwift()
        {
            //cboBancoDestino.ClientEnabled = true;
            blSolicitarTransferencia = new FacadeSolicitarTransferencia_Imp();
            try
            {
                string codigo = txtCodigoSwift.Text;

                List<TB_BcoDestino> listaBanco = new List<TB_BcoDestino>();

                listaBanco = blSolicitarTransferencia.getCodigoCorresponsal(codigo);
                if (listaBanco.Count==0)
                {
                    string msg = "Código Swift Incorrecto";
                    string titulo="Mensaje";
                    mensaje.Text = msg;
                    cboBancoDestino.ClientEnabled = false;
                    popupMensajes.ShowOnPageLoad = true;

                }
                else
                {
                    
                    cboBancoDestino.Value= listaBanco[0].codigoBcoDestino;
                    cboBancoDestino.Text = listaBanco[0].nombreBcoDestibo;
                    ASPxTextBox2.Text = listaBanco[0].codigoBcoDestino;
                    cboBancoDestino.ClientEnabled = false;
                }
                //cboBancoDestino.DataSource = blSolicitarTransferencia.listarBancoDes();
                //cboBancoDestino.TextField = "nombreBcoDestibo";
                //cboBancoDestino.ValueField = "codigoBcoDestino";
                //cboBancoDestino.DataBind();

            }
            catch (Exception ex)
            {
                strTitulo = "Error al validar código Swift";
                strMsg =  ex.Message;
                MostrarComentario(popupMensaje, lblmensaje, strMsg, strTitulo);
            }
        }

        protected void cboTipocargo_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboTipocargo.SelectedIndex==0)
            {
                lblTipoCargo.Text = ConfigurationManager.AppSettings["SHA"];
            }
            if (cboTipocargo.SelectedIndex==1)
            {
                lblTipoCargo.Text = ConfigurationManager.AppSettings["OUR"];
            }
        }

        protected void btnAgregarBenef_Click(object sender, EventArgs e)
        {
            if (cboCuenta.SelectedIndex != 0)
            {
                this.cargarGrillaBeneficiario();
                //Session["accionBeneficiario"] = cboCuenta.Value;
                //Response.Redirect("wfrmActualizarBeneficiario.aspx");
                popupAgregarBenef.ShowOnPageLoad = true;

            }
            else
            {
                popupMensaje.HeaderText="Mensaje";
                popupMensaje.ShowOnPageLoad = true;
                lblmensaje.Text = "Seleccion una Cuenta de Ordenante";

            }
       
        }

      

       

        
        protected void cboCuenta_ValueChanged(object sender, EventArgs e)
        {
            blSolicitarTransferencia = new FacadeSolicitarTransferencia_Imp();
            //txtNombre.Text = this.obtenerCliente(Convert.ToString(cboCuenta.Value));
            //this.cargarCuentaCliente();
            //this.cargarBeneficiario((string)cboCuenta.Value);
            string id = cboCuenta.SelectedItem.Value.ToString() == string.Empty ? "0" : (string)cboCuenta.Value;
            this.cargarBeneficiario(id);
            this.cargarCuentaCliente();
        }


        void cargarGrillaBeneficiario()
        {
            //blGestionarTransferncia =new FacadeGestionarTransferencia_Imp();
            blSolicitarTransferencia = new FacadeSolicitarTransferencia_Imp();
            
            try
            {
                grdBeneficiario.DataSource = blSolicitarTransferencia.listarBeneficiarioXCliente((string)cboCuenta.Value);
                grdBeneficiario.DataBind();
            }
            catch (Exception ex)
            {
                popupMensaje.ShowOnPageLoad = true;
                lblmensaje.Text = ex.Message;
            }
        }


        protected void btnModificarB_Click(object sender, EventArgs e)
        {
            Session["accionAB"] = 2;
            lblmensajeconfi.Text = "Esta seguro de actualizar el registro seleccionado.";
            popupConfirmarAB.ShowOnPageLoad = true;

        }
        bool validarCuenta(string cuenta)
        {
            blSolicitarTransferencia = new FacadeSolicitarTransferencia_Imp();
            List<TB_Beneficiario> listaCuenta = new List<TB_Beneficiario>();
            bool resultado = false;
            try
            {
                listaCuenta = blSolicitarTransferencia.listarBeneficiario();

                foreach (var item in listaCuenta)
                {
                    if (item.cuentaBeneficiario==cuenta)
                    {
                        resultado = true;
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                lblmensaje.Text = ex.Message;
                popupMensajes.HeaderText = "Mensaje";
                popupMensajes.ShowOnPageLoad = true;
            }
            return resultado;
        }
        protected void btnAgregarB_Click(object sender, EventArgs e)
        {
            if (this.validarCuenta(txtCuentaBen.Text))
            {
                lblmensaje.Text = "La cuenta ya existe.";
            popupMensaje.ShowOnPageLoad = true;
            return;
            }
            Session["accionAB"] = 1;
            lblmensajeconfi.Text = "Esta seguro de registrar los datos ingresados.";
            popupConfirmarAB.ShowOnPageLoad = true;

        }

        protected void btnEliminarB_Click(object sender, EventArgs e)
        {
            Session["accionAB"] = 3;
            lblmensajeconfi.Text = "Esta seguro de eliminar el registro seleccionado.";
            popupConfirmarAB.ShowOnPageLoad = true;

        }

        protected void btnCerrar_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/Index.aspx");
        }

        protected void grdBeneficiario_FocusedRowChanged(object sender, EventArgs e)
        {
            string cuenta = Convert.ToString(grdBeneficiario.GetRowValues(grdBeneficiario.FocusedRowIndex, "cuentaBeneficiario"));
            string nombre = Convert.ToString(grdBeneficiario.GetRowValues(grdBeneficiario.FocusedRowIndex, "nomBeneficiario"));
            string direccion = Convert.ToString(grdBeneficiario.GetRowValues(grdBeneficiario.FocusedRowIndex, "dirBeneficiario"));
            if (!IsPostBack)
            {
                return;
            }
            txtCuentaBen.Text = cuenta;
            txtNombreBen.Text = nombre;
            txtDireccionBen.Text = direccion;
        }

        void cleanControls()
        {
            txtCuentaBen.Text = string.Empty;
            txtNombreBen.Text = string.Empty;
            txtDireccionBen.Text = string.Empty;
        }

        protected void btnAceptarB_Click(object sender, EventArgs e)
        {
            blActualizarBeneficiario = new FacadeActualizarBeneficiario();
            if (Convert.ToInt32(Session["accionAB"]) == 1)
            {
                TB_Beneficiario objNewbeneficiario = new TB_Beneficiario();
                objNewbeneficiario.cuentaBeneficiario = txtCuentaBen.Text.ToUpper();
                objNewbeneficiario.nomBeneficiario = txtNombreBen.Text.ToUpper();
                objNewbeneficiario.dirBeneficiario = txtDireccionBen.Text.ToUpper();
                objNewbeneficiario.idcCliente = (string)cboCuenta.Value;
                if (blActualizarBeneficiario.InsertarBeneficiario(objNewbeneficiario))
                {
                    lblmensaje.Text = "Se registro correctamente.";
                    popupMensaje.ShowOnPageLoad = true;
                    //ScriptManager.RegisterStartupScript(this, typeof(string), "OPEN_WINDOW", "mensaje();", true);
                    //ClientScript.RegisterStartupScript(GetType(), "SetFocusScript", "mensaje();");
                }
                else
                {
                    lblmensaje.Text = "Ya está registrado el Beneficiario";
                    popupMensaje.ShowOnPageLoad = true;
                    //ScriptManager.RegisterStartupScript(this, typeof(string), "OPEN_WINDOW", "mensaje();", true);
                    //ClientScript.RegisterStartupScript(GetType(), "SetFocusScript", "mensaje();");
                }
            }
            if (Convert.ToInt32(Session["accionAB"]) == 2)
            {
                TB_Beneficiario objUpdatebeneficiario = new TB_Beneficiario();
                objUpdatebeneficiario.cuentaBeneficiario = txtCuentaBen.Text.ToUpper();
                objUpdatebeneficiario.nomBeneficiario = txtNombreBen.Text.ToUpper();
                objUpdatebeneficiario.dirBeneficiario = txtDireccionBen.Text.ToUpper();
                objUpdatebeneficiario.idcCliente = (string)cboCuenta.Value;
                if (blActualizarBeneficiario.ModificarBeneficiario(objUpdatebeneficiario))
                {
                    lblmensaje.Text = "Se actualizo correctamente.";
                    popupMensaje.ShowOnPageLoad = true;
                    //ScriptManager.RegisterStartupScript(this, typeof(string), "OPEN_WINDOW", "mensaje();", true);
                    //ClientScript.RegisterStartupScript(GetType(), "SetFocusScript", "mensaje();");

                }
                else
                {
                    lblmensaje.Text = "Error al actualizar";
                    popupMensaje.ShowOnPageLoad = true;
                    //ScriptManager.RegisterStartupScript(this, typeof(string), "OPEN_WINDOW", "mensaje();", true);

                }
            }
            if (Convert.ToInt32(Session["accionAB"]) == 3)
            {
                TB_Beneficiario objDeletebeneficiario = new TB_Beneficiario();
                objDeletebeneficiario.cuentaBeneficiario = txtCuentaBen.Text;
                objDeletebeneficiario.nomBeneficiario = txtNombreBen.Text;
                objDeletebeneficiario.dirBeneficiario = txtDireccionBen.Text;
                objDeletebeneficiario.idcCliente = (string)cboCuenta.Value;
                if (blActualizarBeneficiario.EliminarBeneficiario(objDeletebeneficiario))
                {
                    lblmensaje.Text = "Se eliminó correctamente.";
                    popupMensaje.ShowOnPageLoad = true;
                    //ScriptManager.RegisterStartupScript(this, typeof(string), "OPEN_WINDOW", "mensaje();", true);
                    //ClientScript.RegisterStartupScript(GetType(), "SetFocusScript", "mensaje();");
                }
                else
                {
                    lblmensaje.Text = "La cuenta Beneficiario esta relacionada con una transferencia realizada";
                    popupMensaje.ShowOnPageLoad = true;
                    //ScriptManager.RegisterStartupScript(this, typeof(string), "OPEN_WINDOW", "mensaje();", true);
                    //ClientScript.RegisterStartupScript(GetType(), "SetFocusScript", "mensaje();");
                }
            }
            
            this.cargarGrillaBeneficiario();
            this.cleanControls();
            string id = cboCuenta.SelectedItem.Value.ToString() == string.Empty ? "0" : (string)cboCuenta.Value;
            this.cargarBeneficiario(id);
        }
       
    }
}